from openai import OpenAI
import json

# GMT   https://wise-miracle-5324-8080.east4.casdao.com/v1
# XQ    https://smiling-perennial-4985-8080.east4.casdao.com/v1
base_url = "https://smiling-perennial-4985-8080.east4.casdao.com/v1"

client = OpenAI(
    base_url=base_url,
    api_key="test"
)

def process_result(result):
    result = result.strip()
    # 判断s是否为json格式
    if result.startswith("```json"):
        result = result.strip("```json")
    if result.endswith("```"):
        result = result.lstrip()
    return result

def get_img_description_by_base64(base64_image):
    return get_img_description(f"data:image/jpeg;base64,{base64_image}")


def get_img_description(img_url):
    response = client.chat.completions.create(
        model="Qwen2.5-VL-3B-Instruct-AWQ",
        messages=[
            {
                "role": "user",
                "content": [
                    {
                        "type": "text",
                        "text": """
            你是一个校园管理员，
            你的工作内容是监测有没有人在抽烟，
            请注意：
                1，先简要描述一下现场情况，然后表明是否有人在吸烟；
                2，输出格式参考如下：
                {
                    "帧数": -1,
                    "现场描述": "简要描述一下现场的情况",
                    "是否吸烟": "现场是否有人吸烟，可选项为：'是'或'不是'"
                }
                3，按照标准json格式输出以上内容，不要用 ```json 和 ``` 包裹，也不需要其它的任何解释或说明！
            """
                    },
                    {
                        "type": "image_url",
                        "image_url": {"url" : img_url},
                    },
                ],
            }
        ],
        max_tokens=1024,
    )
    s = response.choices[0].message.content
    # 判断s是否为json格式
    try:
        return json.loads(process_result(s))
    except Exception as e:
        return {"帧数": -1, "现场描述": "无法描述", "是否吸烟": "无法判断"}


def get_video_description(video_url):
    response = client.chat.completions.create(
        model="Qwen2.5-VL-3B-Instruct-AWQ",
        messages=[
            {
                "role": "user",
                "content": [
                    {
                        "type": "text",
                        "text": """
            你是一个视频分析员，
            你的工作内容是监测视频中有没有人吸烟
            请注意：
                1，先简要描述一下现场情况，然后表明是否有人在吸烟；
                2，输出格式参考如下：
                {
                    "现场描述": "简要描述一下现场的情况",
                    "是否吸烟": "现场是否有人吸烟，可选项为：'是'或'不是'"
                }
                3，按照标准json格式输出以上内容，不要用 ```json 和 ``` 包裹，也不需要其它的任何解释或说明！
            """
                    },
                    {
                        "type": "video_url",
                        "video_url": {
                            "url": video_url
                        },
                    }
                ],
            }
        ],
        max_tokens=1024,
    )
    s = response.choices[0].message.content
    try:
        return json.loads(process_result(s))
    except Exception as e:
        return {"现场描述": "无法描述", "是否吸烟": "无法判断"}

if __name__ == "__main__":
    img_url = 'http://minio.love4xiao7.top:9000/bjj-rag-doc-bucket/171cd770-1.jpg'
    video_url = 'http://minio.love4xiao7.top:9000/bjj-rag-doc-bucket/smoking-0.81-20250318090640.mp4'
    # result = get_img_description(img_url)
    result = get_video_description(video_url)
    print(result)
